//
// Created by 25429 on 2020/7/9.
//

#include "task_limit_up_sell.h"


void task_limit_up_sell::init() {
    strategy_task::init();

    m_phase = LIMIT_UP_PHASE::STOP;
    //m_stop_price = m_stock_info.limit_up_price * m_fail_to_n_per / 100;

    util::Singleton<my_log>::Instance()->add_log(m_log_title
                                                 + "[m_target_volume]" + to_string(m_target_volume));
}

void task_limit_up_sell::on_md_l2_mkt(const SiriusMDRspMarketField &mkt) {
    m_last_mkt = mkt;

//    if (mkt.time >= AM_09_30) {
//        switch (m_phase) {
//            case LIMIT_UP_PHASE::WAIT_TOUCH_LIMIT_UP:
//                if (common_function::touch_limit_up(mkt, m_stock_info)) {
//                    util::Singleton<my_log>::Instance()->add_log(m_log_title + "touch limit up");
//                    m_phase = LIMIT_UP_PHASE::WAIT_FAIL_TO_N_PER;
//                    m_touch_limit_up = true;
//                }
//                break;
//            case LIMIT_UP_PHASE::WAIT_FAIL_TO_N_PER:
//                if (m_last_mkt.limit_up) {
//                    util::Singleton<my_log>::Instance()->add_log(m_log_title + "limit up");
//                    m_max_block_money = m_block_money;
//                    m_phase = LIMIT_UP_PHASE::LESS_THAN_4_MILLION;
//                    break;
//                }
//                if (mkt.last_price < m_stop_price) {
//                    if (order_sell()) {
//                        m_phase = LIMIT_UP_PHASE::STOP;
//                        util::Singleton<my_log>::Instance()->add_log(
//                                m_log_title + "hit stop price:" + to_string(m_stop_price));
//                        break;
//                    }
//                }
//                break;
//            case LIMIT_UP_PHASE::LESS_THAN_4_MILLION:
//                if (m_last_mkt.limit_up) {
//                    if (m_max_block_money > PRICE_400W) {
//                        util::Singleton<my_log>::Instance()->add_log(
//                                m_log_title + "block money over:" + to_string(PRICE_400W));
//                        m_phase = LIMIT_UP_PHASE::LESS_THAN_15_MILLION;
//                        on_md_l2_mkt(mkt);
//                    }
//                    break;
//                }
//                util::Singleton<my_log>::Instance()->add_log(m_log_title + "limit up disappear");
//
//                m_max_block_money = 0;
//                if (m_touch_limit_up) {
//                    m_phase = LIMIT_UP_PHASE::WAIT_FAIL_TO_N_PER;
//                    on_md_l2_mkt(mkt);
//                    break;
//                }
//                if (order_sell()) {
//                    m_phase = LIMIT_UP_PHASE::STOP;
//                }
//                break;
//            case LIMIT_UP_PHASE::LESS_THAN_15_MILLION:
//                if (m_last_mkt.limit_up) {
//                    if (m_block_money < PRICE_400W) {
//                        if (order_sell()) {
//                            m_phase = LIMIT_UP_PHASE::STOP;
//                            util::Singleton<my_log>::Instance()->add_log(
//                                    m_log_title + "fewer block money:" + to_string(m_block_money));
//                            break;
//                        }
//                    }
//                    break;
//                }
//                util::Singleton<my_log>::Instance()->add_log(m_log_title + "limit up disappear");
//                m_max_block_money = 0;
//                if (order_sell()) {
//                    m_phase = LIMIT_UP_PHASE::STOP;
//                }
//                break;
//            default:
//                break;
//        }
//    } else {
//        if (mkt.time < AM_09_30) {
//            if (m_last_mkt.limit_up && m_phase != LIMIT_UP_PHASE::LESS_THAN_4_MILLION) {
//                util::Singleton<my_log>::Instance()->add_log(m_log_title
//                                                             + "pre market limit up");
//                m_phase = LIMIT_UP_PHASE::LESS_THAN_4_MILLION;
//            }
//            if (!m_last_mkt.limit_up && m_phase != LIMIT_UP_PHASE::WAIT_TOUCH_LIMIT_UP) {
//                util::Singleton<my_log>::Instance()->add_log(m_log_title
//                                                             + "pre market not limit up");
//                m_phase = LIMIT_UP_PHASE::WAIT_TOUCH_LIMIT_UP;
//            }
//            return;
//        }
//    }
}